package com.gjx.leetcode;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
//90. 子集 II
//给定一个可能包含重复元素的整数数组 nums，返回该数组所有可能的子集（幂集）。
//
//说明：解集不能包含重复的子集。
//
//示例:
//
//输入: [1,2,2]
//输出:
//[
//  [2],
//  [1],
//  [1,2,2],
//  [2,2],
//  [1,2],
//  []
//]

public class Solution090 {
	public List<List<Integer>> subsetsWithDup(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        Arrays.sort(nums);
        dfs(nums, 0, res, new ArrayList<>());
        return res;
    }
	
	
	private void dfs(int[] nums, int start, List<List<Integer>> res, List<Integer> path) {
		res.add(new ArrayList<Integer>(path));
		
		for (int i=start; i<nums.length; i++) {
			
			if (i > start && nums[i] == nums[i-1]) {
				continue;
			}
			
			path.add(nums[i]);
			dfs(nums, i+1, res, path);
			path.remove(path.size()-1);
			
		}
	}
	
}
